Обновить

Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все

Время на прочтение 20 мин
Количество просмотров 208K

Статья опубликована под лицензией Creative Commons BY-NC-SA.

Три месяца назад здесь на Хабре я опубликовал статью “Интернет-цензура и обход блокировок: не время расслабляться”, в которой простыми примерами показывалось, что практически все популярные у нашего населения для обхода блокировок VPN- и прокси-протоколы, такие как Wireguard, L2TP/IPSec, и даже SoftEther VPN, SSTP и туннель-через-SSH, могут быть довольно легко детектированы цензорами и заблокированы при должном желании. На фоне слухов о том, что Роскомнадзор активно обменивается опытом блокировок с коллегами из Китая и блокировках популярных VPN-сервисов, у многих людей стали возникать вопросы, что же делать и какие технологии использовать для получения надежного нефильтрованного доступа в глобальный интернет.

Мировым лидером в области интернет-цензуры является Китай, поэтому имеет смысл обратить наш взор на технологии, которые разработали энтузиасты из Китая и других стран для борьбы с GFW (“великим китайским файрволом”). Правда, для неподготовленного пользователя это может оказаться нетривиальной задачей: существует огромное количество программ и протоколов с похожими названиями и с разными не всегда совместимыми между собой версиями, огромное количество опций, плагинов, серверов и клиентов для них, хоть какая-то нормальная документация существует нередко только на китайском языке, на английском - куцая и устаревшая, а на русском ее нет вообще.

Поэтому сейчас мы попробуем разобраться, что же это все такое, как это использовать, и при этом не сойти с ума.

Нейрокартинка для отвлечения внимания
Нейрокартинка для отвлечения внимания

В этой статье я проведу обзор самых передовых протоколов и технологий, которые:

  • позволяют делать передаваемый трафик не похожим вообще ни на один существующий стандартный протокол, делая его полностью неразличимым для цензоров;

  • либо наоборот, позволяют максимально достоверно маскироваться под безобидный HTTPS-трафик, включая защиту сервера от детектирования методом active probing с помощью фейкового веб-сайта, маскировку TLS fingerprint клиента под обычный браузер, и защиту от выявления туннеля нейросетями (детектирования TLS-inside-TLS);

  • позволяют работать в условиях жесткого шейпинга канала и потерь пакетов;

  • позволяют создавать цепочки из серверов и настраивать маршруты (например, фильтровать трафик до российских адресов).

Итак, поехали.

Shadowsocks, ShadowsocksR, Shadowsocks-AEAD, Shadowsocks-2022

Начнем, по традиции, с “дедушки”, прародителя многих других современных средств обхода блокировок - протокола Shadowsocks.

Логотип ShadowSocks
Логотип ShadowSocks

Идея Shadowsocks проста: авторы взяли классический SOCKS-протокол, который передает все данные в открытом виде и поэтому очень легко детектируется на DPI, прикрутили к нему шифрование разными алгоритмами, выкинули ненужный функционал (например, нет нужды в авторизации по логину и паролю, проверка свой/чужой определяется ключом шифрования), и добавили несколько других штук для усложнения детектирования. И это сработало - долгое время Shadowsocks был излюбленным инструментом тысяч людей, позволяющим пробиваться через великий китайский файервол.

Оригинальный Shadowsocks был разработан программистом с ником “clowwindy”. В 2015 году clowwindy написал в своем Github, что к нему нагрянула китайская полиция и сделала предложение, от которого не было возможности отказаться, и в результате чего он был вынужден прекратить работу над проектом и удалить все исходники из репозитория.

После этого другие энтузиасты создали форк под названием ShadowsocksR и продолжили дело. Через некоторое время разработка ShadowsocksR заглохла, но развитие протокола продолжилось в разных других репозиториях под оригинальным названием. В изначальном протоколе ShadowSocks исследователи обнаружили ряд уязвимостей, позволявших его индентификацию и блокировку (например, с помощью replay-атак), поэтому в 2017 году появился Shadowsocks-AEAD с измененным алгоритмом аутентификации, а в прошлом году была выпущена новая версия протокола под названием Shadowsocks-2022, в которой авторы продолжили работу по улучшению устойчивости протокола к блокировкам. Все эти версии между собой не совместимы.

Со стороны цензоров подключение через Shadowsocks, если вы не используете какие-либо дополнительные расширения для маскировки под TLS (Shadow-TLS) или Websockets, выглядит как непонятное нечто - просто не похожий ни на что поток данных. Старые версии Shadowsocks уже давно не считаются надежными и устойчивыми к выявлению, однако современные версии протокола до недавних пор вполне себе могли использоваться как средство обхода блокировок в случае если цензоры спокойно относятся к “неопределенным” протоколам. В конце 2022 года группа исследователей под названием GFW-report опубликовала отчет о том, что цензоры научились выявлять подобные “неопределенные” протоколы по… отношению количества 0 и 1 битов в потоке данных. Ими была выпущена специально пропатченная версия shadowsocks, однако во-первых пропатченные клиент и сервер не совместимы с “обычными версиями”, а во-вторых патч подходит только для старых версий протокола, но не для Shadowsocks-2022 (авторы сказали, что работают над этим). Из сторонних клиентов поддержка этого хака под названием ReducedIvHeadEntropy есть только в SagerNet и V2Ray и отсутствует практически во всех GUI-клиентах.

Оригинальный Shadowsocks был написан на C с использованием библиотеки libev. Данная версия более не развивается, основная актуальная на сегодняшний день реализация написана на Rust. Между тем, протоколы Shadowsocks разных версий поддерживаются в том числе и в других клиентах и серверах (таких как V2Ray, XRay, SagerNet, Sing-box, и т.д.), о которых речь пойдет позже, поэтому Shadowsocks вполне можно рассматривать как запасной вариант, активировав его на одном сервере с другими протоколами.

V2Ray, V2Fly, XRay (VMess, VLESS, XTLS)

Все началось с проекта под названием V2Ray, автором которого была Victoria Raymond (отсюда, видимо, и появилось название). Достоверно неизвестно, существовал ли в реальности человек с такими именем, или это чья-то виртуальная личность, но в итоге случилось следущее: в один момент Victoria Raymond перестала выходить на связь что на Github, что в Twitter, что где-либо еще (ничего не напоминает, правда?).

Логотип Project V
Логотип Project V

В результате остальные контрибьюторы проекта, не имея административного доступа к Git-репозиториям и веб-сайту, были вынуждены форкнуть его под названием V2Fly для того чтобы продолжить разработку. Грубо говоря, если вы видите github-юзера или веб-сайт с названием V2Ray - весьма вероятно, что там содержится старый код и устаревшая информация, а вот с названием V2Fly - это уже нечто гораздо более актуальное. Между тем, многие люди (и даже сами разработчики!) по-прежнему продолжают называть V2Fly как V2Ray, бинарники и пакеты по-прежнему называются v2ray-core, что добавляет немного путаницы.

XRay - это форк V2Fly, когда некоторые разработчики из-за ряда разногласий с остальным сообществом (где-то я встречал  упоминания что разногласия были по технической части, где-то же написано что из-за лицензий) ушли из проекта V2Fly и продолжили развивать код параллельно под названием XRay, придумав ему слоган “Penetrates everything”, что очень недалеко от правды. Формат конфигурационных файлов остался прежним, но при этом новая реализация считается более эффективной в плане производительности, а самое главное - разработчики добавили туда несколько очень крутых фич, направленных в том числе на снижение детектируемости подключений на DPI (например, с помощью выявления TLS-in-TLS), таких как XTLS, речь о которых пойдет ниже. 

V2Ray/XRay - это не протокол, а, можно сказать, фреймворк - разные протоколы с разными транспортами и расширениями под одной крышей в одном приложении. Идея простая: что клиент, что сервер - это один бинарник. В конфигурации задаются inbounds (обработчики входящих подключений) и outbound (обработчики исходящих подключений).
На клиенте inbound обычно будет работать как HTTP- или SOCKS-прокси сервер, принимая подключения от браузеров и других программ, а outbound будет настроен как клиент какого-нибудь прокси-протокола для подключения к удаленному серверу.

На сервере все наоборот, inbound - это сервер какого-нибудь протокола (их может быть несколько одновременно с разными вариантами), а outbound - это, например “freedom” (выход в чистый интернет), “blackhole” (блокировка исходящих подключений, если вам, например, нужно ограничить доступ в зависимости от каких-то правил), или следущий прокси в цепочке, и т.д.

Для каждого из используемых протоколов можно задать также тип транспорта, например, просто TCP, либо TLS, либо Websockets, либо еще что, и таким образом создавать самые разнообразные комбинации и варианты.

Для связи inbounds и outbouds можно задавать всевозможные правила маршрутизации. Например, уже на клиенте можно автоматически отправлять все запросы к доменам “.ru” и российским IP-адресам согласно базе GeoIP на outbound “freedom” (прямой доступ к интернет без прокси), а все остальное проксировать на удаленный сервер. Или наоборот, по умолчанию отправять все на freedom, а проксировать только адреса и домены из списка (в том числе с масками и регулярными выражениями). Можно использовать разные прокси и протоколы в зависимости от типа подключения (TCP или UDP), в зависимости от порта назначения (например, перехватывать DNS-запросы на 53-ий порт, и т.д.). Можно строить цепочки из серверов - приняли подключение на одном прокси-сервере, передали его дальше на следущий, и т.д. Короче говоря, штука получилась очень гибкая и фунциональная.

Непосредственно классических протоколов в V2Ray и XRay всего два с половиной: VMess, VLESS и VLite (это та самая половина).

VMess - самый первый и самый старый. Поддерживат определение свой/чужой по ID пользователя и опционально шифрование данных.

В качестве ID-пользователя выступает UUID и (в оригинальной реализации VMess) специальное число под названием alterId. Если эти данные совпадают на клиенте и на сервере - подключение устанавливается, если нет - извините :) В конфигурации сервера может быть определено сразу много пользователей. Не буду детально углублятся в то, что такое alterId, скажу просто - это значение могло быть в принципе любым (обычно от 1 до 64), главное что оно должно было совпадать на клиенте и сервере, и изначально было нужно для механизма повышения надежности протокола. Со временем выяснилось, что механизм аутентификации оригинального VMess уязвим к ряду атак, в итоге разработчики выпустили новый вариант протокола с переделанным алгоритмом проверки пользователя, который активировался при выставлении значения alterId в 0. То есть в наше время alterId по сути дела не используется, благо практически все серверы и клиенты умеют в новый вариант протокола.

В настоящее время VMess считается устаревшим, а при работе через просто TCP - небезопасным, однако вариант VMess-over-Websockets-over-TLS по-прежнему вполне себе жизнеспособен и может использоваться при отсуствии поддерживаемых в каком-либо клиенте альтернатив.

VLESS (как отметили в комментах, именно так, большими буквами) - это более новый протокол. В отличие от VMess он не предусматривает механизма шифрования (подразумевается, что шифрование должно производиться нижележащим транспортным протоколом, например TLS), а только проверку “свой/чужой” и паддинг данных (изменение размеров пакетов для затруднения детектирования паттернов траффика). В протоколе исправлен ряд уязвимостей старого VMess, и он активно развивается - например, автор планирует добавить поддержку компрессии алгоритмом Zstd - не сколько для производительности, сколько для затруднения анализа “снаружи”. При этом, при установлении соединения (хендшейке) клиент и сервер обмениваются версией протокола и списком поддерживаемых фич, то есть при дальнейшем развитии должна сохраняться обратная совместимость. В общем и целом, на сегодняшний день это самый свежий и прогрессивный протокол.

Обратите внимание: то, что VLESS не предусматривает шифрования на уровне протокола, не значит, что данные передаются в нешифрованном виде. VLESS всегда работает поверх TLS, трафик шифруется именно механизмами TLS, а не самого VLESS. Никакой проблемы с безопасностью тут нет, все секьюрно :)

VLite есть только в V2Ray (в XRay его нет), поддерживает только передачу UDP-пакетов, и максимально оптимизирован именно для этого, что может быть полезно, например, для онлайн игр, но параллельно придется настроить еще VMess/VLESS для TCP - поэтому я считаю его только “половиной” :)

Кроме VMess и VLESS сервера и клиенты V2Ray и XRay также поддерживают протокол Shadowsocks (в том числе версий AEAD и 2022)  о котором я говорил выше, а также Trojan, о котором речь пойдет в следущей главе.

С протоколами закончили, перейдем к транспортам. VLESS, VMess и другие могут работать, скажем так, разным образом. Самый простой вариант - обычный TCP-транспорт. VMess+TCP в данном случае очень похож на Shadowsocks, а VLESS+TCP не имеет смысла (из-за отсутствия шифрования). Более интересный вариант - TLS-транспорт, когда устанавливается обычное TLS-подключение (как и в случае с любыми HTTPS-сайтами), а уже внутри этого зашифрованного соединения работает протокол. V2Ray и XRay умеют также работать поверх mKCP (о нем будет в следущих главах), QUIC (aka HTTP/3, правда в России его массово блокируют и смысла в нем мало), gRPC, и самое интересное - через Websockets.

Вариант с Websockets очень ценен тем, что:

  1. Позволяет легко поставить V2Ray/XRay не перед, а за Nginx/Caddy/любымдругимвебсервером;

  2. Позволяет пролезать через строгие корпоративные фаерволы;

  3. Добавляет дополнительный уровень защиты (не зная URI невозможно достучаться до прокси-сервера);

  4. И самое интересное - позволяет работать через CDN (upd.: gRPC тоже позволяет). 

На последнем пункте остановимся чуть подробнее. Некоторые CDN, в том числе и имеющие бесплатные тарифы, такие как Cloudflare и GCore, разрешают проксирование веб-сокетов даже на бесплатных тарифах. Таким образом, это может быть хорошим подспорьем - если по какой-то причине IP-адрес вашего сервера попал в бан, вы все равно можете подключиться к нему через CDN, а полный бан всей CDN гораздо менее вероятен, чем какого-то одного VPS. А еще Cloudflare (возможно и GCore тоже, не уточнял) умеет проксировать IPv4 запросы на IPv6 адрес, то есть свой прокси-сервер вы можете поднять даже на копеечном (можно найти варианты за 60 центов в месяц!) IPv6-only или NAT VPS без IPv4 адреса, и наплодить таких серверов чуть ли не десяток в разных локациях :)

Недостатком транспорта через веб-сокеты является более долгий хендшейк (установление каждого соединения) чем напрямую через TLS. Но и здесь есть решение.

Сервера XRay и Sing-Box (возможно и V2Ray тоже, не проверял) позволяют задавать также механизм fallaback’ов для разных протоколов. Например, при подключении пользователя первым делом сервер пытается обработать входящее подключение как VLESS-over-TCP. Если хендшейк оказался успешным, пользователь опознан - работаем, если нет - передаем следущему обработчику. Следущий обработчик, может, например, попытаться воспринять это новое подключение как VMess-over-Websocket. Если сработало - отлично, если нет - то передаем подключение следущему inbound’у. А тот, в свою очередь, не разбираясь, перенаправляет подключение на локальный веб-сервер с котиками. Таким образом у нас есть возможность одновременно принимать подключения и через VLESS-TCP, и через VLESS-Websockets или VMess-Websockets на одном порту, а если не сработал ни один из вариантов, прикидываться безобидным веб-сайтом.

Еще одна фича V2Ray и XRay - мультиплексирование соединений (mux или mux.cool). В этом случае на каждое новое подключение к какому-либо сайту не будет устанавливаться новое подключение к прокси, а будут переиспользованы существующие. Что в теории может ускорить хендшейк и привлекать меньше внимания со стороны цензоров (меньше параллельных подключений к одному хосту), с другой стороны снижает скорость передачи данных из-за оверхеда на дополнительные заголовки пакетов.

XUDP и Packet - расширения VLESS для более эффективной передчи UDP-пакетов и реализации Full Cone NAT. Packet - версия подревнее, XUDP по-новее. Без их использования многие NAT-тесты будут жаловаться на кривой NAT ("endpoint address not changed), а с XUDP вы получаете нормальный честный Full Cone. Это может быть полезно для онлайн-игр, месседжеров и разного софта с передачей аудио и видео. XUDP и Packet нельзя использовать одновременно с MUX из прошлого параграфа из-за особенностей реализации (авторы старались впихать все в рамки существующего протокола и сохранить обратную совместимость, поэтому были вынуждены переиспользовать некоторые механизмы).

А теперь про самое интересные фичи.

uTLS предназначена для обмана механизма детектирования на основе TLS fingerprint, о котором я рассказывал в прошлой статье. Почитать про TLS fingerprint можно на посвященном ему сайте. В Китае и Иране цензоры активно используют этот механизм для детектирования прокси-клиентов - если мы обращаемся к какому-нибудь прокси, замаскированному под HTTPS-сайт, но при этом TLS fingerprint клиента отличается от популярных браузеров (особенно если клиент написан на Go, у которого очень специфичный фингерпринт), то соединение блокируется. uTLS - это специально пропатченный вариант стандартной TLS-библиотеки Go, позволяющий маскироваться под другие приложения. Некоторые клиенты дают выбор из нескольких вариантов (например chrome, firefox, safari), некоторые позволяют выбирать желаемый fingerprint вплоть до версии конкретного браузера.
В нынешних реалиях uTLS является очень крутой и почти что жизненно необходимой штукой (РКН пока что по фингепринтам  не блочит, но как показывает опыт других стран, может начать в любой момент), поэтому рекомендуется его использовать во всех случаях, если он поддерживается клиентом (а если не поддерживается - лучше выбрать клиент, который поддерживает).

И наконец, XTLS, фирменная фишка XRay.

Сегодня почти что все веб-сайты работают не через голый HTTP, а через HTTPS (TLS). Используя прокси с TLS мы, по сути дела, еще раз шифруем уже зашифрованные данные. Во-первых это неэффективно, а во-вторых, что гораздо хуже - китайские цензоры научились определять TLS-inside-TLS (возможно с помощью нейросетей). Авторы XRay посмотрели на это, и решили: зачем шифровать то, что уже зашифровано? И придумали XTLS.

Суть проста: прокси-сервер подслушивает передаваемый трафик, и если видит, что если между клиентом (например, браузером) и удаленным хостом (например веб-сервером) устанавливается TLS-соединение, то дожидается окончания хендшейка, и после чего перестает шифровать трафик, начиная передавать пакеты данных “как есть”. В итоге существенно снижается нагрузка на прокси-сервер и клиент, и что важнее - со стороны трафик выглядит гораздо менее подозрительно (у нас подключение по TLS, поэтому до сервера бегают простые TLS-пакеты без аномалий, никакого двойного шифрования).

XTLS имеет несколько разных версий, которые отличаются алгоритмами работы, xtls-rprx-origin и xtls-rprx-direct - самые первые из них, в xtls-rprx-splice задействован механизм ядра Linux splice для более эффективного копирования данных между сокетами. Все они уже не актуальны, в настоящее время рекомендуется использовать последнюю версию XTLS-Vision (xtls-rprx-vision), подробное описание работы которой можно прочитать здесь. По ряду сообщений, на сегодняшний день связка VLESS+XTLS-Vision является единственной, которую пока еще не умеет эффективно блокировать китайский GFW (при условии соблюдения рядя важных моментов, например, запрета доступа к китайским сайтам через прокси). Единственный минус - xtls-rprx-vision пока что поддерживается не всеми клиентами, и XTLS по понятным причинам не работает через CDN.

Хозяйке на заметку: в отличие от предыдущих версий, при настройке клиентов для xtls-rprx-vision нужно выбирать тип транспорта не “XTLS”, а просто “TLS”. Нелогично, видимо связано с особенностями реализации, но такова жизнь.

И наконец, заглянем в завтрашний день: XTLS-Reality. Это самое новое изобретение от авторов XRay. Он уже поддерживается в master-ветке xray и даже в некоторых клиентах, но про него все еще мало что известно. В отличие от всех остальных вариантов, определение “свой/чужой” здесь происходит еще на этапе TLS-хендшейка в момент чтения ClientHello. Если клиент опознан как “свой”, сервер работает как прокси, а если нет - вжух! - и TLS подключение передается на какой-нибудь другой абсолютно реальный хост с TLS (например, google.com или gosuslugi.ru), и таким образом клиент (или цензор, желающий методом active probing проверить, а что же прячется на том конце) получит настоящий TLS-сертификат от google.com или gosuslugi.ru и настоящие данные с этого сервера. Полное соответствие. Определение "свой-чужой" происходит по значения некоторых полей пакетов TLS-хендшейшка, которые формально должны быть рандомные, а по факту генерируются специальным образом, но не зная исходного "секрета", который использовался при их генерации, невозможно определить, действительно ли это рандом или нет - соответственно для прокси этот механизм позволяет достоверно определить подлинность клиента, но вместе с тем не вызывать подозрения у цензоров и быть устойчивым к replay-атакам. Вероятно за этим будущее :)

Upd:
«Bleeding-edge обход блокировок: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто»

Trojan-GFW и Trojan-Go

Наряду с Shadowsocks и V2Ray протокол Trojan является одним из первых и популярных способов обхода блокировок в Китае, и по принципу работы в принципе соответствует своему названию :)  Для стороннего наблюдателя работа через него выглядит как подключение к обычному веб-серверу, но на самом деле это веб-сервер с подвохом секретом (аки троянский конь).

Trojan работает поверх TLS (точно так же как HTTPS). После установления TLS-сессии сервер ожидает хендшейк в специальном формате, одним из полей которого является хеш секретного ключа. Если сообщение и ключ корректны - дальше сервер работает как прокси, если нет - запрос передается на стоящий рядом веб-сервер, и таким образом имитируется работа безобидного сайта через HTTPS.

Trojan-GFW - оригинальная версия, написанная на C++. Trojan-Go - продолжение проекта, теперь уже на языке Go . Trojan поддерживается многими мультипротокольными клиентамии серверами типа Sing-box и V2Ray/XRay - в этом случае вместе с Trojan также можно использовать упомянутые выше фичи uTLS и XTLS, что повышает надежность протокола и уменьшает вероятность его детектирования.

Если вы внимательно читали до этого, то Вам сразу же станет понятно, что Trojan в принципе аналогичен VLESS+TLS с настроенным fallback на веб-сайт. Каких-либо явных преимуществ перед VLESS+TLS у Trojan лично я не вижу, можно относиться к нему как к еще одной альтернативе.

Naiveproxy

Идея Naiveproxy, опять же, простая до невозможности. Если наша цель - замаскировать трафик от прокси-клиента так, чтобы он был вообще ничем неотличим от трафика от обычного браузера - почему бы не использовать для этого сам браузер?

Именно так и рассудил автор Naiveproxy и сделал следущее: взял исходники браузера Chromium, оторвал оттуда код сетевого стека, и использовал его в своем прокси-клиенте, причем в качестве прокси-протокола используется самый обычный метод CONNECT + HTTP/2.

В итоге одним выстрелом убивается сразу несколько зайцев: 

  • TLS finerprint и вообще поведение такого подключения полностью до мельчайших деталей соответствует настоящему браузеру Chromium - более того, автор периодически синхронизируется с кодовой базой Chromium, чтобы иметь самые новые версии его сетевого стека, и таким образом максимально соответствовать свежим версиям браузера;

  • Определение паттернов трафика, характерных для определенных веб-сайтов, затрудняется благодаря HTTP/2 мультиплексированию;

  • Определение свой/чужой, чтобы не демаскировать прокси при active probing осуществляется посредством стандартных HTTP-заголовков (“Proxy-Authorization”). Если там содержатся правильные данные - ларчик открывается, если нет, либо же заголовки отсутствуют - сервер делает вид, что не понимает, что от него хотят и выдает фейковый сайт.

В теории, на “той стороне” в качестве прокси-сервера может выступать вообще любой сервер, поддерживающий метод CONNECT (например, tinyproxy), а авторизацию “свой-чужой” можно сделать с помощью reverse-proxy такого как HAProxy. Однако гораздо лучше использовать реализации, знающие про особенности naiveproxy - в таком случае в пакеты данных также добавляется padding (грубо говоря, мусорные данные, не несущие смысловой нагрузки) для усложнения анализа паттернов трафика. Это может быть, например, сам naiveproxy на сервере, или же патченный плагин для известного веб-сервера Caddy.

Cloak

Посоветовали тут в комментариях. Штука интересная. Cloak - это не прокси-протокол, а только транспорт, то есть он делает подключение "точка-точка" (между вашим устройством и сервером), а внутри него уже можете гонять тот же Shadowsocks, или OpenVPN, или что угодно.

Работает поверх TLS 1.3, "свой/чужой" определяется по содержимому полей в ClientHello специальным образом (видимо очень схожим с XTLS-Reality), если "чужой" - то подключение передается на фейковый веб-сайт. Также используется TLS fingerprint от Chrome либо Firefox. Механизмы обфускации и подключения подробно описаны вот здесь: https://github.com/cbeuw/Cloak/wiki/Steganography-and-encryption. Есть также клиент под Android, и ещё транспорт Cloak поддерживается в некоторых мультпротокольные клиентах (например, Shadowrocket.

Если вы не хотите разбираться со всеми этими V2Ray, XRay, и подобным, у вас уже все настроено, и вы просто хотите обезопасить ваш существующий сервер (например, OpenVPN) от блокировки, то Cloak может быть отличным выбором

KCP (kcptun), mKCP

В сравнении со всем описанным выше, KCP - это протокол совершенно другого рода. 

Авторы KCP переосмыслили алгоритмы передачи данных и разработали протокол, который работая поверх UDP обеспечивает надежную передачу, так же как TCP, но при этом в сравнении с TCP средняя задержка (пинг) при его использовании ниже на 30–40 %, а максимальная задержка меньше в три раза (правда, за счет потери полосы пропускания на 10–20%).

И все это как нельзя кстати оказалось для обхода блокировок, потому что в Китае и в некоторых арабских странах “неизвестные” протоколы нередко не блокировались полностью, а то ли намеренно, то ли из-за кривости механизмов фильтрации резались путем замедления и потерь пакетов. Также KCP может быть полезным при работе через отвратительные соединения (например, олдовый 3G в условиях плохого покрытия сети).

Для эффективной работы KCP требует указания в конфигурации измеренной реальной пропускной способности канала на прием и передачу.

Теперь разберемся с версиями и реализациями.

KCP - это оригинальный протокол. Kcptun - реализация туннеля на основе KCP.

mKCP - это вариант протокола KCP от V2Ray - по сути дела тот же KCP, но с небольшими изменениями (KCP и mKCP между собой не совместимы, имейте в виду). В V2Ray/XRay mKCP не является самостоятельным прокси-протоколом, а только лишь транспортом - то есть поверх него все так же нужно использовать VMess или VLESS. V2Ray/XRay имеют также опцию  “congestion” для автоматической перенастройки параметров канала в случае высоких потерь пакетов, как и в оргигинальном kcptun можно задать секретный ключ (тут он называется “seed”) для усложнения детектирования, а еще можно маскировать внешний вид UDP-пакетов под SRTP (используемый, например, в Apple FaceTime), uTP (Bittorrent), WeChat, и DTLS (используемый в WebRTC, например, многими месседжерами).

Hysteria

Hysteria во многом очень похож на KCP, а ещё на всем известный QUIC, и авторы то ли вдохновлялись их механизмами, то ли напрямую в какой-то мере переиспользовали их. Кто авторы - тоже неизвестно, они сохраняют анонимость, документация на официальном сайте только на английском и китайском языке, но в примерах конфигурации среди секретных ключей встречается строка “Мать-Россия”, прямо так, кириллицей, что наталкивает на размышления.

Логотип Hysteria
Логотип Hysteria

Hysteria - это прокси-инструмент, как и Kcptun предназаченный для работы через нестабильные сети с потерями пакетов, ну и обхода блокировок, само собой. 

В отличие от KCP, Hysteria передает данные не просто поверх UDP, а с использованием протокола QUIC (HTTP/3). Поэтому для работы на сервере должен иметься TLS-сертификат, сервер Hysteria умеет автоматически запрашивать сертификаты методом ACME (например, от Let’s Encrypt). Поскольку QUIC часто полностью блокируется в ряде стран (в том числе и в России), есть также возможность установить ключ для обфускации данных, в результате чего UDP-пакеты становятся ни на что не похожи.

Также как и для KCP, на стороне клиента Hysteria необходимо задать доступную ширину канала (например, в мегабитах), а еще есть интересный режим port hopping - разработчики подметили, что в Китае при детектировании “неправильных протоколов” бан накладывается не на весь IP-адрес целиком, а на связку IP+порт, поэтому сервер может слушать сразу на большом количестве портов, а “клиент” может прыгать на разные рандомные порты при неудачных попытках соединения.

И еще одна интересная возможность Hysteria - FakeTCP. В этом режиме клиент и сервер будут обмениваться пакетами, которые выглядят как TCP-пакеты (согласно их заголовку), но в обход системного TCP-стека и его механизмов. В итоге для всех промежуточных роутеров и цензоров обмен данными выглядит как TCP-подключение, хотя на самом деле им не является. Это может помогать в случае использования корпоративных фаерволов или цензоров, полностью режущих UDP. FakeTCP поддерживается только в Linux.

Meiru, TUIC, Brook, Pingtunnel

Эти протоколы вы мало где встретите, разве что только в самых упоротых клиентах. Я не встречал на просторах интернета упоминания их массового использования, поэтому просто пройдусь очень кратко, для общего развития, так сказать:

Meiru - аналог Shadowsocks / VMess+TCP, просто зашифрованный поток данных с паддингом поверх TCP или UDP.

TUIC - прокси-протокол поверх QUIC нацеленный на минимальный оверхед (0-RTT)

Brook - официально называется даже не прокси,  а “cross-platform network tool designed for developers”, видимо, чтобы не привлекать внимание цензоров, хотя в футере сайта есть гордое заявление “Undetectable Protocol”. Информации об идеях в основе протокола и его преимуществах практически нет даже на официальном сайте и Github’е, судя по обрывочным данным, может работать в режиме “random” (как и Shadowsocks, непонятный поток данных), HTTP/HTTPS, в том числе поверх Websockets, и т.д. Возможно разработчики действительно придумали какие-то оригинальные идеи, затрудняющие детектирование, но никому об этом открыто не рассказывают, чтобы не привлекать внимания, в надежде что лезть и изучать исходники у цензоров не хватит терпения и квалификации, либо рассчитывают на эффект "неуловимого Джо".

PingTunnel - как следует из названия, позволяет проксировать TCP и UDP с помощью обычных ICMP-пингов. Звучит многообещающе.

Что использовать?

РКН-тян с интересом смотрит на ваши попытки обхода цензуры
РКН-тян с интересом смотрит на ваши попытки обхода цензуры

Зависит от того, насколько вы себя уверенно чувствуете в системном администрировании и готовы во всем этом разбираться методом проб и ошибок.

Если не уверены, либо не готовы и хочется максимально простое и универсальное решение, то я могу посоветовать настроить XRay в варианте VLESS-over-Websockets с fallback’ом на какой-нибудь безобидный веб-сайт. Со стороны клиентов обязательно выбрать опцию uTLS, и желательно добавить настройку чтобы ресурсы в зоне .ru и с российскими IP открывались без прокси.

Такая связка поддерживается практически всеми клиентами, еще долгое время будет устойчива к детектированию (учитывая отсталость и тормознутость нашего родного РКН), при наличии зарегистрированного домена можно работать через CDN, а устанавливается и настраивается все это элементарно парой команд в консоли (об этом будет в одной из следущих статей).

Если вы готовы к подвигам и экспериментам, то можно задуматься о настройке XRay с VLESS+XTLS-Vision, добавить fallback на VLESS+Websockets для старых клиентов и CDN разных видов, и на том же сервере поднять еще mKCP/Hysteria, Shadowsocks-2022 и классический SSH-туннель. И на будущее присмотреться к XTLS-Reality. В случае чего, хоть один из вариантов, но сработает.

А еще в одной из следущих статей я расскажу про клиенты. Потому что с клиентами дело обстоит примерно так же, как с серверами и протоколами: их много, они разные, некоторые из них являются форками друг друга, но с существенными отличиями, некоторые поддерживают одно, некоторые другое, а некоторые, казалось бы, поддерживают только это и это, но при правильном подходе их можно заставить поддерживать то, что они, казалось бы, не поддерживают :) Короче говоря, будет интересно, не переключайтесь.

Продолжения:

Программы-клиенты для недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing-Box, и все-все-все

Обход блокировок: настройка прокси-сервера XRay для Shadowsocks-2022 и VLESS с XTLS, Websockets и фейковым веб-сайтом

Bleeding-edge обход блокировок: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто

Важно: автор не присутствует в Telegram или каких-либо иных месседжерах или соцсетях, не оказывает никаких платных консультаций и не выполняет никаких работ за деньги, а на вопросы отвечает только на хабре (когда есть время). Остерегайтесь мошенников.

Теги:
Хабы:
Всего голосов 157: ↑155 и ↓2 +153
Комментарии 135
+135
Закрыть

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Комментарии 135

Закрепленные Закреплённые комментарии

Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

Reality протокол уже официально пре-релизнулся и поддерживается многими клиентами, аля WingsX (iOS, Mac), v2rayNG (Android), v2rayN (Windows). Если посмотреть в гитхабе, есть примеры (https://github.com/chika0801/Xray-examples) и описание. Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct, и если прям релизнут, то v2rayNG и тд релизнут новые версии с новым ядром не только в github, но и в play market и тд, и тем самым на многие сервера нельзя будет подключиться из-за того что клиенты не будут поддерживать старые конфиги.

Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

Многие говорят что у Trojan бОльшая задержка нежели у VLESS, но тем не менее оно всё таки имеет приемущество в некотром смысле - поддержка на старых устройствах. Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

Использовать ws, grpc в России это пока слишком, нет смысла терять скорость если нет необходимости. Можно понять если у нас не осталось уже чистых IP и блочат как в Иране или Туркменистане например, и использовать ws, grpc вместе с cdn, тогда это ещё разумно, а так, такое..

В целом статья хорошая, у меня не дошли руки дописать, но я рад что статья всё таки вышла и подготовила хабрчан к чебурнету)

Важно: автор не присутствует в Telegram или каких-либо иных месседжерах или соцсетях, не оказывает никаких платных консультаций и не выполняет никаких работ за деньги, а на вопросы отвечает только на хабре (когда есть время). Остерегайтесь мошенников.

За обзор спасибо, монументально!

А вот на вопрос "что использовать?", если мы в России, а не в Китае - то пока что ответил бы "Wireguard" :) Потому что угадать, что, когда и как будут блокировать, невозможно, и к тому времени наверняка появится целый зоопарк ещё более изощрённых протоколов. Проблемы тут можно решать только по мере их возникновения. Про технические возможности блокировки в текущих реалиях не скажу, не в курсе. Но как минимум историю с регистрацией корпоративных VPN, которую чуть было не начали реализовывать, тогда же сразу и свернули, - так что чтобы начать блочить вот прям протоколами, её сначала надо будет заново пройти.

В любом случае, полезно минимизировать количество трансграничных каналов, т.е. VPN-сервер для пользователей делать в России, а от него уже канал за рубеж отдельно, который в случае наступления тёмных времён можно хоть каждую неделю перенастраивать на новый протокол, не трогая конечные устройства.

Wireguard я бы, честно говоря, не рекомендовал. Потому что из всех существующих он самый уязвимый к детектированию, достоверно известно что куча российских DPI выявлять и резать его уже умеет, поэтому если вдруг у РКН или лицпринимающихрешения возникнет желание, то Wireguard будет вообще чуть ли не самым первым в очереди на блокировку.

А идея с двумя серверами - да, грамотная. И такое реализовать не так уж и сложно.

Ну заблокируют - он будет за пару часов заменён на что угодно другое. Пока что он очень радует минимальной потерей скорости при ощутимой latency (а до зарубежного сервера у нас по-любому >30ms)

Два сервера у меня уже больше года. Изначально даже не из опасений блокировки, а из-за того, что весь трафик пользователей гонять через Европу - лишние тормоза и проблемы с российскими сайтами. А таблицу маршрутизации на десятки/сотни тысяч префиксов я себе на роутеры (дома и в офисе) по BGP раздаю, но на телефон-то её не запихнёшь (да и на ноутбук под виндой без отдельных танцев с бубном - тоже).

Пока что он очень радует минимальной потерей скорости при ощутимой latency (а до зарубежного сервера у нас по-любому >30ms)

Судя по всему, не так страшна эта проблема, как ее малюют. У меня Xray между хостами в Москве и Праге легко выдает честные ~100 мегабит по TCP-соединению (пинг около 50 мс).

А зачем на телефон? телефон цепляется ipsec\wireguard к домашнему роутеру, а роутер уже решает куда дальше пулять.

Так я ровно про это и пишу. Для конечных устройств один VPN-сервер с популярным и шустрым протоколом, а от него за кордон - другой, с тем протоколом, который пробьётся. Только Вы предлагаете в качестве первого VPN-сервера домашний роутер использовать, у меня отдельная виртуалка в облаке. Тут уж от количества и состава пользователей и стабильности домашнего канала зависит, но это нюансы, схема принципиально та же.

телефон цепляется ipsec\wireguard к домашнему роутеру

В случае начала блокировок по протоколам на DPI, есть неиллюзорная вероятность что по IPSec/Wireguard телефон не сможет никуда присоединиться даже внутри страны.

Это было не к вопросу обхода блокировок, а к вопросу маршрутизации.

Внутри страны блочить IPSec/WireGuard сразу не будут. Даже перед блокировкой VPN-сервисов популярных ЦБ проводил опрос у банков не пользуются ли они случайно ими, чтобы ненароком бизнес-процессы не сломать. IPSec отвечает в огромном количестве компаний за интеграции между компаниями, региональными отделениями. О подготовке к блокировке такого мы узнаем явно заранее.

IPSec отвечает в огромном количестве компаний за интеграции между компаниями, региональными отделениями. 

Поэтому в первую очередь могут начать блочить только физлиц, а юрлиц уже попозже, когда механизм белых списков будет готов.

Но вот оно приключилось

Так в итоге и не заблочили пока. Тыкают палочкой, смотрят.

Технари склонны ударятся в другую крайность — "а наверну-ка я обфускацию по-максимуму, чтобы быть на шаг впереди даже тех китайцев, которые обходят Золотой Щит".


Но не нужно бежать быстрее медведя, достаточно бежать быстрее самых медленных. А самые медленные сейчас — пользователи коммерческих сервисов.


Я вообще много лет сижу на бесплатном Антизапрете (даже не его self-hosted варианте), заблокировать который как два байта переслать (достаточно доступ к домену заблокировать), но который, тем не менее, отметил 10-летие работы.

Технари склонны ударятся в другую крайность — "а наверну-ка я обфускацию по-максимуму, чтобы быть на шаг впереди даже тех китайцев, которые обходят Золотой Щит".

Ну это весьма полезная крайность. Ибо в случае чего даёт гораздо больше времени на принятие мер и адаптацию к обстановке, которая может измениться в любой момент. Особенно если вы настраиваете туннель не себе, а например, совсем не-айтишным родственникам, оставшимся в России, и не можете заранее угадать, в какую сторону будут действовать недоброжелатели.

Но не нужно бежать быстрее медведя, достаточно бежать быстрее самых медленных. А самые медленные сейчас — пользователи коммерческих сервисов.

Увы, это так не работает. Потому что если в какой-то момент запахнет жареным и РКН вместо бана по айпишникам начнет банить по протоколам (как это случилось например, в Беларуси в 2020 году), то для DPI не будет разницы, бегает ли у вас Wireguard до публичного сервиса или до личного VPS.

Я вообще много лет сижу на бесплатном Антизапрете (даже не его self-hosted варианте), заблокировать который как два байта переслать (достаточно доступ к домену заблокировать), но который, тем не менее, отметил 10-летие работы.

"Доступ к домену заблокировать" - не совсем элементарное действие, подменой DNS давно уже никого не заблокируешь (хотя случаи блокировок DoH-резолверов в России уже наблюдались), а для нормальной блокировки домена в случае с HTTPS для этого нужен DPI умеющий в парсинг TLS ClientHello. У ряда маленьких операторов связи такого нет до сих пор, поэтому Антизапрет у них работает, а вот у крупных (типа большой четверки и примкнувших к ним) DPI уже другого вида и Антизапрет там не работает. Ну и рассчитывать на то что "у моего провайдера тупые блокировки, значит все нормально" тоже не стоит, ибо известны случаи, когда фильтрация внезапно начинала происходить не у самого провайдера, а у магистрала.

Истово поддерживаю. Не нужно выкладывать все что умеешь.

У киатйцев на гитхабе прям просьба жирным текстом. Меньше спрашивай, больше читай.

Не давай инфу GFW.

У киатйцев на гитхабе прям просьба жирным текстом. Меньше спрашивай, больше читай.

...что не мешает тем же китайцам выкладывать диздоки и описания своих протоколов на тот же гитхаб :) А ещё выкладывать код в опен-сорс и публиковать changelog'и для клиентов и серверов, так что можно легко сделать diff между двумя ревизиями в гите и понять, что поменялось в коде и как работает та или иная новая фича.

На самом деле все описанное в статье, давно известно и опубликовано, поэтому никакого ящика Пандоры я не открываю. А security through obscurity - тактика изначально неэффективная и позволяет только незначительно отсрочить следующую итерацию войны меча и щита.

Коммерческие сервисы тоже есть со всякими маскировками. Вон, Adguard VPN уже давно хвалится, что у них какой-то особый протокол, который до сих пор не могут заблокировать — и ведь работает, что характерно...

Там тоже обычный TLS. Скорее всего глупей того же XTLS-Reality.

Сглазили вы Антизапрет :)

угу, который составляет реестр неугодных.... и следит за ними уже 10 лет....

Для wireguard есть обфускатор https://github.com/infinet/xt_wgobfs очень быстрый и работает на openwrt.

Какой-то лютый костыль, честно говоря, linux-only и без поддержки в распространенных клиентах (например, на мобильных девайсах).

Этот костыль почти не замедляет wireguard поскольку работает тоже в ядре. Альтернатив по скорости насколько я понимаю нет. Поддержки других систем нет, но для линуха работает хорошо.

В ядре - это хорошо только на первый взгляд. По факту сложно обновлять и портировать. Поэтому очень многие кто использует WG под капотом перешли на userspace-имплементации (на Go там или ещё чём). Обновлять можно просто выкатив новый бинарник приложения.

А несколько % скорости не так важны, особенно в плане обхода блокировок.

В интернете есть более красивая идея.
Пользователи идут на забугорный VPN сервер который ВЫПОЛНЯЕТ требования роскомнадзора. Поэтому его не блокируют.
А с того VPN сервера идут на частный VPN сервер, о котором роскомнадзор не знает.

а это, простите - какой? Который выполняет. Для себя интересуюсь.

Это просто идея. Такие сервера мне неизвестны.

кажется что лолгично с него начинать как с самого простого-молодёжного-итд. но почему то ещё пару лет назад всплывали новости о тестировании блокировок протоколов на (внезапно) - ipsec\l2tp несмотря на то что ето самые корпоративные протоколы иих троготь надо в последнюю очередь

Использую Outline на своем сервере. Он как, заслуживает доверия?

Это shadowsocks. Поэтому, думаю, заслуживает.

jigsaw-code под google так что подумать дважды прежде чем (наверняка так же как хром телеметрит по полной)

он у меня (винда10) дерется с tun-интерфейсом от OpenVPN и не работает вообще. а так полезная вещь, да

это чистый shadowsocks, почитайте статью, он давно детектится

А есть кто-то сравнимое по удобству и простоте настройки? Что детектится - пока не режут вроде, никто не жаловался.

Так то да, пока не трогают, но запасные варианты надо иметь.

Чем он удобен, кроме того, что ставится одной командой в докер?

Вчера настроил после этой статьи xray/grpc + xray/xtls-vision. Потратил прилично времени, чтоб все это понять. Зато в клиенте shadowrocket куча настроек, что куда/почему/зачем. Намного гибче, чем outline.

Outline очень удобен, когда делаешь VPN не для себя или не только для себя. У него очень простые однокнопочные клиенты, не требующие настройки и понятные даже бабушке. Ну и то, что устанавливается всё одной командой, сразу работает, и легко администрируется - это несомненный плюс, особенно, когда свободного времени не так много.

Надо чтобы клиенты ставились и подключались одной кнопкой, чтобы родителям или людям далеким от ИТ было просто ставить. С этим у Outline все хорошо

авторы на гитхабе пишут про это https://github.com/Jigsaw-Code/outline-server#shadowsocks-resistance-against-detection-and-blocking

The Outline team and Shadowsocks community made a number of improvements that strengthened Shadowsocks beyond the censor's current capabilities.
...
Shadowsocks remains our protocol of choice because it's simple, well understood and very performant.

Rust-реализация должна уметь, да, у них в README указаны опции сборки aead-cipher-2022 и aead-cipher-2022-extra. В конфигурации, соответственно, нужно использовать method который начинается с "2022-", например 2022-blake3-aes-128-gcm и 2022-blake3-aes-256-gcm (это стандартные), или 2022-blake3-chacha20-poly1305, 2022-blake3-chacha12-poly1305, 2022-blake3-chacha8-poly1305 (это extra).

Другой вариант - использовать XRay-core в качестве сервера, он умеет в ss-2022 (имена методов те же), я проверял.

Клиент, соответственно, должен уметь в тот же метод ("2022-*"), что настроен на сервере.

Спасибо за разъяснение, меня термин "плагин" по отношению к X-Ray ввел в заблуждение, я решил, что ему нужен будет Shadowsocks, а он самодостаточный клиент-сервер получается.

Да, все верно, XRay (как и Sing-Box, он вообще прекрасен) самодостаточный и довольно много умеет из коробки.

XRay еще и multiuser умеет, ShadowSocks-ev не умел.

Лично я склоняюсь к юридическим, а не к технологическим решениям проблемы. Необходимо изменение законодательства, а не его обход.

Написал бы много мыслей по этому поводу, но, к сожалению, карма слишком низка.

В данном случае изменение законодательства не в интересах того, кто может менять это самое законодательство законодательство, потому в российских реалиях предложение из разряда фантастики.

Может быть off-topic, но никто не знает решения на android с протоколом IP-over-DNS?
Iodine имеет клиент andiodine, который падает, накрылся slowdns.
Судя по тестам провайдер пропускает dns трафик даже при отрицательном балансе.

а оно живет еще? в одном перевернутом провайдере прибили все эти "овер" уже давно, лет 10 как. icmp, dns и другие чудеса.

Я заграницей, отрицательный баланс, скорость смог довести до 100кб+ при установке длинных txt записей:


image

Спасибо за статью. Как раз сейчас изучаю Xray и sing-box. Заинтересовался XTLS Reality, благо он реализован и в xray и sing-box. Но Gui клиентов с поддержкой realty на Windows не нашёл, хотя на андроид есть Nekobox.

Про клиенты, в том числе и GUI, будет следующая статья. Sing-Box умеет Reality, соответственно если в десктопном Nekobox используется свежая версия ядра, то и он должен работать с ним - в UI, понятное дело, такой опции нет, но Nekobox позволяет добавлять кастомные поля в JSON-конфиг чтобы включить то чего не хватает, у меня с XTLS Vision такой хак отлично сработал.

Ещё есть Clash-Verge, который основан на ядре Clash.Meta, последние версии которого заявляют поддержку Reality, но это вариант не самый простой в настройке и вообще на любителя.

Nekobox позволяет добавлять кастомные поля в JSON-конфиг

То ли я слепой, то ли лыжи не едут)
С Nekobox с вашей подачи разобрался, спасибо

Upd. Только что проверил - свежая версия v2rayN вроде как поддерживает Reality, по крайней мере версия ядра там новая, и есть соответствующая опция в интерфейсе. Но сам интерфейс вырвиглазенький, да, поэтому я всё-таки за Nekobox.

Интерфейс старой версии и вправду был вырвиглазным, но сейчас всё изменилось, а может вы этот и имели ввиду, хе)

Чтонибудь из этих средств можно установить без административного доступа к винде?

Клиент v2ray не требует административного доступа к винде (и установки вообще как таковой). Софтина поднимает локальный прокси, который можно вбить в браузер или плагин.

Вопрос про клиент или сервер?

Если про клиент, то да - большинств что консольных, что GUI клиентов не требуют установки (достаточно кинуть файлы в папочку и запустить) и не требуют административного доступа. Но есть один нюанс: не получится работать через TUN-интерфейс (для установки драйвера и настройки сети нужны админские права), только через локальный прокси. Настройки прокси в винде, насколько я помню, может менять даже непривелигированный пользователь, и даже если админы запретили это делать, можно использовать браузер который не завязывается на системные настройки (например, Firefox точно так умеет).

В сети ходят куча скриптов от китайцев, которые разворачивают практически любую из перечисленных в статье конфигураций, с одной оговоркой — они нафиг сносят существующий nginx и переписывают его своим. Хуже того — некоторые вообще его оставляют только для переадресации на сайт-заглушку, а на порту 443 висит, собственно, сам v2ray.
Есть ли какие-то скрипты, которые поднимают только v2ray с рюшечками, не трогая nginx?
Хотелось бы совместить приятное с полезным и разместить еще какие-то страницы на локальном nginx, а не отдавать сервер полностью под v2ray да редиректы.
У меня на старом сервере висит v2ray на "каталоге" сайта, но все новые авто-скрипты, похоже, так делать разучились.

Смотря что именно надо - если в планах использовать XTLS (Vision или Reality), то XRay должен стоять перед Nginx, потому что эти механизмы требуют TLS-хаков, и поэтому сессия должна терминироваться именно в XRay. XRay умеет в fallbacks, поэтому можно без проблем перекидывать запросы на локальный Nginx и отдавать какой-нибудь сайт, правда, как оно поведет себя под нагрузками - вопрос. Ну или можно заморочиться с Nginx ssl_preread модулем и разруливать по поддоменам.

Если же никаких излишеств не надо, то можно настроить в XRay inbound типа VLess через Websockets на каком-нибудь левом порту, а в Nginx прописать правило проксирования websockets с определенного URI на этот локальный порт где висит XRay.

Скриптов для этого даже особых не надо, Xray написан на Go и устанавливается просто киданием бинаря куда-нибудь в /opt, ну для надёжности можно systemd-юнит из трёх строк написать :)

Смотря что именно надо — если в планах использовать XTLS (Vision или Reality), то XRay должен стоять перед Nginx, потому что эти механизмы требуют TLS-хаков, и поэтому сессия должна терминироваться именно в XRay.
Ага, вот оно что. Тогда понятно, почему так :)
Скриптов для этого даже особых не надо, Xray написан на Go и устанавливается просто киданием бинаря куда-нибудь в /opt, ну для надёжности можно systemd-юнит из трёх строк написать :)
Да тут скорее банально рабочий конфиг v2ray бы сгенерировать. А то я что-то пытался руками написать — не взлетело. Придется дальше мануалы раскуривать.

За хорошими примерами конфигов советую заглянуть сюда: https://github.com/v2fly/v2ray-examples/ (V2ray) и сюда https://github.com/XTLS/Xray-examples (XRay). В репе Xray ещё есть примеры конфигов Nginx для разных вариантов, надеюсь окажется полезным. Ну или дождаться одной из следующих статей, постараюсь написать про простой вариант установки сервера (но это наверное где-нибудь в мае, ибо работы много, а потом отпуск).

Вот кстати да, вариантов установки сервера очень не хватает, ansible скриптов каких-нибудь, особенно, как уже отметили, при уже работающем nginx или другом реверс прокси.

Так что спасибо за эту статью и заранее спасибо за будущую!

Поддерживаю. И еще собранные пакеты под какую-нибудь Линуксовую систему хочется... Можно даже Убунту... Или Тэйлс :)

Все известные мультпротокольные сервера написаны на Go, так что там собранные пакеты даже не нужны - закинул бинарь куда-нибудь в /opt, рядом положил конфиг, и добавил трехстрочный юнит для systemd чтобы все запускалось автоматически от нужного юзера. И все работает.

Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

Reality протокол уже официально пре-релизнулся и поддерживается многими клиентами, аля WingsX (iOS, Mac), v2rayNG (Android), v2rayN (Windows). Если посмотреть в гитхабе, есть примеры (https://github.com/chika0801/Xray-examples) и описание. Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct, и если прям релизнут, то v2rayNG и тд релизнут новые версии с новым ядром не только в github, но и в play market и тд, и тем самым на многие сервера нельзя будет подключиться из-за того что клиенты не будут поддерживать старые конфиги.

Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

Многие говорят что у Trojan бОльшая задержка нежели у VLESS, но тем не менее оно всё таки имеет приемущество в некотром смысле - поддержка на старых устройствах. Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

Использовать ws, grpc в России это пока слишком, нет смысла терять скорость если нет необходимости. Можно понять если у нас не осталось уже чистых IP и блочат как в Иране или Туркменистане например, и использовать ws, grpc вместе с cdn, тогда это ещё разумно, а так, такое..

В целом статья хорошая, у меня не дошли руки дописать, но я рад что статья всё таки вышла и подготовила хабрчан к чебурнету)

Да, обзор приятный, но не хватает гайдов и\или скриптов, так что ждем вместе с автором мая месяца.
А то я вот вроде не совсем дебил, но тот v2ray, что у меня поднял скрипт (года два назад) работает прекрасно, а на другой машине с более новым v2ray скопированный конфиг с измененным uuid и путем — уже не работает. Хотя казалось бы… Из настроек там по сути только они и есть.

ждем вместе с автором мая месяца.

Вы что-то знали про май месяц?

Отличный комментарий, огромное спасибо.

Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

Принято! Сейчас отредактирую.

Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct

Насколько я помню, direct вполне официально объявлен как deprecated и рекомендуется переходить на vision. Sing-box вон, его изначально и не поддерживал :)

Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

А сколько нужно набрать объема, чтобы Cloudflare начал требовать деньги? У меня пока пользователи гоняли до гигабайта в месяц и CF вроде не бухтят. В документации Sing-Box про gRPC сказано что у него "poor performance", хотя возможно это особенности конкретной реализации.

 Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

На iOS <16 еще можно использовать Shadowrocket, он хорошо умеет в VLESS с XTLS-Vision и uTLS. Единственный недостаток - немного платный, 3 бакса.

Насколько я помню, direct вполне официально объявлен как deprecated и рекомендуется переходить на vision. Sing-box вон, его изначально и не поддерживал :)

Даже если deprecated, всё таки надо помнить что многие используют до сих пор direct и радуются жизни, а вот обновление, оно такое жесткое что прервёт этот кайф)

А сколько нужно набрать объема, чтобы Cloudflare начал требовать деньги?

К сожалению CF решила не указать конкретные цифры, но подробная табличка есть здесь: https://developers.cloudflare.com/support/network/using-cloudflare-with-websockets/

На iOS <16 еще можно использовать Shadowrocket, он хорошо умеет в VLESS с XTLS-Vision и uTLS.

Я заранее подготовился к данному аргументу, и поэтому указал что нет клиентов именно с оригинальным Xray-core в iOS'ах ниже 16 версии)

а куда они дели utls из shadowrocket в ios 16?

почитав все эти перепетии, подумал что чебурнет это просто когда не работает QUIC от слова совсем. Все просто ушли вперед, а чебурнет остался.

А что, ssh-туннели в России уже режут?

Понятно, что для Китая - да. А в России-то зачем? Если не режут, то и вряд ли будут. У нас последним самым ушлым 1% обычно не занимаются.

Ожидал и не увидел идеи прятать стеганографией в видеопоток. Например, через какой-нибудь имитатор zoom.

Пока не режут, но как показывает пример Китая, если вдруг захотят (например при каких-нибудь событиях), то очень даже смогут. И "если не режут, то вряд ли будут" - довольно наивное суждение. Потому что когда порежут все популярные варианты, доля хитрозадых с SSH будет уже не 1%, а многократно больше. Как говорится, надейся на лучшее, готовься к худшему.

Упомянутые в статье KCP и Hysteria умеют делать маскировку трафика под SRTP и DTLS (WebRTC), которые используются для передачи аудио-видео во многих месседжерах.

НЛО прилетело и опубликовало эту надпись здесь

По примеру Китая - замедление до черепашьих скоростей если характер передачи данных (паттерны трафика) похожи на серфинг или же по превышении определенного объема переданных данных.

У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh. Не готова Россия к полной изоляции по факту. И сервера за рубежом по факту, и работники.

Так-то оно да, кто-то вот землянки роет. Вопрос в вероятностях и матожидании выхлопа.

У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh.

Варианты: а) их вообще никто спрашивать не будет, как не спрашивали про многие вещи произошедшие за последнее время б) фильтровать/тормозить SSH можно только для физлиц, юрлица пусть работают в) фильтровать/тормозить можно всех, кроме тех что в белых списках, список адресов предоставлять в Роскомнадзо в кабинет номер 228 по средам с 9 до 12 на бланке юрлица с печатью и справкой от участкового.

а) будут, потому что нужна квалификация, чел в погонах не понимает что такое ssh.

б) в) слишком сложно, нет такой энергии и мощи организации

я) если даже так, то бегите, глупцы :) (что и кому вы там собираетесь доказывать своими иксреями?)

а)

это очень грубая, школьная, ошибка. вас видимо в Первый отдел не таскали и внимательно не беседовали.

Первый отдел принимает решения о запрете? Может неаккуратно выразился, согласен, что существуют челы в погонах, которые понимают. Но они для точечных репресиий, не для общего запрета.

я буду уклоняться от темы статьи. Первый отдел просто берет за... ну не будем уточнять. на кукан, как рыбу. и можно кричать о правах и прочее... не поможет. и вы очень недооцениваете роль товарищей майоров в текущей жизни. надеюсь, вам с ними не придется столкнуться.

У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh.

Так же мощно наложат, как наложили, когда их обязали оборудование для защиты детей от гейства за свой счет купить, поставить и доступы левым людям дать?


Не готова Россия к полной изоляции по факту.

После февраля прошлого года я уже ничему не удивлюсь. К тому же на Россию и ее неготовность к чему-то там центрам принятия решений (с) наплевать.

Вот не уверен, кстати, что доля будет более 1%. Люди смиряются (большинство отказалось от нельзяграма). Пассионарные уезжают или настраивают тунели, последних очень мало по-любому.
Да и вообще, в России сильно выделяться со сложным шифрованием трафика - это игра в русскую рулетку: постучат в физическую дверь сегодня или завтра. Проще уехать, когда ssh-тунели закроют (если до сих пор не хватало) или найти занятия, не зависящие от интернета.

НЛО прилетело и опубликовало эту надпись здесь

На всякий случай надо развернуть и проверить работу! Скачать мало :)
У нас одним днем могут отколоть.

НЛО прилетело и опубликовало эту надпись здесь

В сеть уже не раз утекали письма из РКН, разосланные по всяким банкам и другим компаниям, мол, сообщите, какими VPN вы пользуетесь чтобы мы их случайно не заблокировали.

А что до остального бизнеса - как показала история с ковровой блокировкой Telegram, когда в бан-лист вносили целыми подсетями тысячи адресов, и из-за этого ломались сайты компаний, сервисы и даже банкоматы - проблемы компаний РКН не волнуют.

Спасибо. Всё больше склоняюсь к аренде собственного сервака для индивидуального VPN. Платный VPN, который был закуплен на год с лишним вперёд сначала стал работать с большими перебоями, потом ограничил доступ к ресурсам типа FB, да бог бы с ним невелика потеря. Но теперь он вообще не хочет коннектиться и это уже всерьёз начинает мешать работе, поскольку теряешь доступ к ресурсам типа analog.com. Мало того, что электронные компоненты приходится закупать кривейшими путями, часто через Китай, так слетевшие с катушек цензоры ещё процесс разработки новых электронных устройств затрудняют, стреляя себе в ногу и увеличивая нашу технологическую отсталость!

Тем более, что у некоторых хостеров есть прям готовая услуга - vps с развернутым vpn. Но все это не поможет в случае блокировки VPN

Окей, вопрос с серверами и протоколами решен. А где это все развернуть? Где лучше купить зарубежный сервер, да чтобы оплатить можно было из России?

Многие российские хостеры типа vdsina, ruvds, aeza и другие позволяют арендовать сервер где-нибудь в Нидерландах или еще где и платить за него рублями с российской карточки. Если целью ставится только обход блокировок, а не приватность/анонимность, то такой вариант вполне себе неплох.

Ну либо искать зарубежных хостеров, которые принимают оплату криптой, например, ITL. Но там можно потерять на комиссиях.

пользовался vdsin'ой, но с прошлой недели они ввели 30+% комиссию на пополнение

значит маршируют в закат с военно-морской песней. дотянулись дефективные манагеры и туда.

полностью согласен, докатываю баланс, а пока ищу куда уйти)

я не рекламирую, но вот м... время-веб зашел сразу.

Ну такое. Мне вот важна ширина канала и объем диска, и время-веб с сопоставимыми характеристиками стоит дороже чем (вдсина+30%)

Вот это подстава. Я тоже ими пользовался. Жаль, отличный сервер они мне дали, и канал в частные полгигабита радовал.
Ну или остается только рассматривать эти +30% как часть цены тарифа :)

посмотрите еще weasel, вполне демократичные цены на vps в нидерландах.

цены хорошие. смущает только десктопное железо.

model name : Intel Core Processor (Broadwell, IBRS)

какие цены, такое и железо, зато сеть 5гбит (shared) показывает iperf.

timeweb от 188р.

ishosting.com от 5$.

188 vps в РФ. В Тюльпанландии —  250.

Отличная статья, спасибо!

Можно же для обычного серфинга на те же "зароскомнадзоренные" сайты арендовать дедик где-нибудь в Амстердаме и работать на нём через удаленный рабочий стол.

Что с этой схемой не так?

Можно, почему бы и нет. Только работать через RDP/VNC зачастую само по себе не очень удобно, а уж на мобильных устройствах - тем более. И могут быть проблемы с просмотром видео.

Не заметил в статье про cloak, интересно насколько он хорош для маскировки Shadowsocks?

Хмм, он мне на глаза не попадался. Выглядит интересно, судя по всему сделано с умом, но в целом может быть неплохим вариантом. Правда, не понятно, насколько оно устойчиво к выявлению TLS-inside-anything и что там с fingerprint'ами. Ну и проблема - он практически ни в одном клиенте не поддерживается из коробки, нужно наворачивать схему с двумя приложениями, и на Android тоже, а на iOS видимо вообще никак.

Неудобно только тем, что помимо клиента нужно ещё скачать/настроить плагин. Под IOS тоже работает на клиенте ShadowRocket.

спасибо. я как раз написал телеграм бота управления личным впн. ставится в 1 клик. арендуете vps, запускаете скрипт. shadowsocks который rust. как бы проверить насколько используемые shadowsocks + v2ray отвечают современным требованиям. Вы можете сделать экспертизу?

из коробки:

  • wireguard

  • shadowsocks + v2ray

  • adguardHome

  • легко и быстро настраиваемый PAC доступный по ссылке (в том числе для клиента под android shadowsocks)

  • поддержка домена и ssl

    https://github.com/mercurykd/vpnbot, есть телеграм группа для обсуждения хотелок

    если кто подскажет новейшую лучшую защиту, могу встроить в бота

Такие статьи надо в PDF себе сохранять…

Спасибо за статью. Живу в Китае 13 лет и постоянно приходится проходить квест по перелазу GFW. Имею 5 платных известных впнов и периодически поднимаю свои серваки для туннелирования, но работает всё очень не долговечно и не стабильно. И в разных городах/районах/провайдеров блокировки работают чуть по разному - например ВПН может работать какое-то время, пересекаешь границу с другим городом и он отваливается. Потом опять пол часа ищешь рабочий сервак/сервис/протокол.
Потом из-под впн китайские сервисы и сайты очень медленно шевелятся. А некоторые крупные сайты просто блокируют весь иностранный трафик, и зайти на них можно только из Китая. Вобщем Китай закрывает инет со всех сторон.
И особенная жесть с интернетом происходит во время разных больших партийных съездов.
За распространение впн сервисов тут наказывают очень больно. Вроде еще не наказывают за использование, но это не точно. Ходят слухи, что отслеживают и наказывают в некоторых локациях типа Синьцзяна, но подтвердить слухи не могу.
Я живу в 5 км от Гонконга, там вот нормальный инет, но сигнал глушат на границе. Каждый выезд из Китая ка глоток свежего воздуха)
Здесь просто поставить впн приложение тот еще квест - гугол плей как и весь гугол тут в принципе не доступен, в апп маркетах китайских телефонов впн приложения отсутствуют чуть более чем полностью, ну и во всяких аппсторах та же ситуация.
Если кто планирует лететь в Китай, рекомендую ставить не меньше 3-5 разных впн сервисов еще до прилета. И кстати бесплатные впн сервисы бывают работают лучше платных, но их ставить на свой страх и риск)Самое веселое, что китайцев почти полностью устраивает ситуация с цензурой и ограничениями, но это отдельная тема).

А расскажите чуть подробнее, уж больно противоречивая информация везде. Например, есть ли в Китае какой-то публичный реестр блокировок, или всё втихаря? Какие зарубежные сайты блокируются, а на какие можно заходить? Что с зарубежной инфраструктурой, теми же CDN вроде Cloudflare — они доступны или нет? Для чего лично вы используете обход блокировок?

Блокируют всё втихаря, не удивлюсь если скоро просто перейдут на блокировку всего кроме "белого списка кошерных сайтов". У М̶и̶н̶и̶с̶т̶е̶р̶с̶т̶в̶а̶ ̶п̶р̶а̶в̶д̶ы̶  Партии абсолютная монополия на вещание информации, поэтому в первую очередь борются чтобы никакая информация не просочилась извне и блокируют СМИ, соц сети, мессенджеры. Но под раздачу попадает много всего. Как я уже говорил, гугол полностью заблочен, не работает ни поиск, ни почта, ни гугл сервисы ни даже капча.

Многие сайты хоть и не заблочены, но чтобы залогиниться надо пройти гугл капчу, а так как она не подгружается, то по факту войти нельзя и таки опять нужен впн.
Кстати поисковик яндекс тут работает (правда без отображения картинок), но разрешает пользоваться поисковиком только после авторизации. То есть нельзя просто открыть главную яндекса и что-то искать, сначала надо войти в свою учетку. Интересно если ли у яндекса такие требования в других странах?
Cloudflare без впн как-бы доступен, но не всегда. Во-первых, если его пинговать, то у меня около 20-30% пакетов уходят без ответа. Во-вторых, иногда Cloudflare меня просто не пускает на сайт и пишет Access denied, your location is banned и всё такое, либо бесконечно перезагружается. В общем, пытаться открывать внешние сайты без впн это удовольствие ниже среднего.
Без впн ни работают ни б̶о̶г̶о̶м̶е̶р̶з̶к̶и̶е̶ фейсбуки с твиторами, ни вотсап/вибер/телега.

В Китае разрешен, по-сути, один мессенджер это WeChat, но у иностранцев он работает не удовлетворительно. Чтобы там зарегистрироваться, надо пройти 4 круга ада, вплоть до того, что нужно приглашение от человека, который находится в Китае, и этот человек должен залить в WeChat свой паспорт и привязать банк карту, и потом как-бы выступает гарантом, что приглашенный это благонадежное лицо. И при этом все равно Китай часто блокирует аккаунты иностранцам, которые зарегались на не китайский номер.

То есть связь с миром почти отрезана. Такой парадокс - вроде Китай заинтересован в поиске иностранных клиентов и сбыте товаров забугор, и одновременно с этим запрещает общаться с иностранцами (вотсап/телега). На почту они не любят отвечать, и получается, что много сделок срывается так как нет нормальной оперативной связи. В общем логика в её отсутствии.

Мне лично нужен впн для работы - для связи с клиентами в нормальных мессенджерах + всякие гугл доки, и для развлечений/новостей – ютуба, твитора и прочих редитов.
А сеть Тор у меня так и не получалось завести, возможно я плохо пытался, но за тор тут сильно "ругают", поэтому я не усердствовал в экспериментах от греха подальше.

Вроде есть некий местный одобренный и благословлённый партией ВПН, который регистрируется по паспорту и ессно передает всё тщу майору. Исползовать такой впн я пока морально не готов.
И еще в компьютерные клубы не пускают без китайского ID. Вот никак нельзя без документа зайти поиграть в условный редалерт или посидеть в чатиках. Всё через идентификацию. А иностранцам даже с валидным паспортом нельзя в комп клуб. И этим правилам, по моему опыту, как минимум лет 15, а по факту наверно так было всё время с запуска чинета. Уот так уот.
И небольшой оффтоп на тему биометрии: заметил, что всё больше турникетов метро (по крайней мере в Шэньчжэне) оборудуются сканерами лица и отпечатков пальцев. То есть чтобы просто зайти в метро, надо билет+лицо. Пока не видел, чтобы заставляли сканировать палец, но думаю скоро будет и палец ̶и̶ ̶з̶о̶н̶д̶. Здесь отсутствует такое слово как анонимность. Про то какая жесть была тут с ковидом и как через инет отслеживали каждый метр передвижения людей – уже не буду писать, коммент и так затянулся)

А может кто-нибудь выкатить готовые inbound и outbound для sing-boxa в конфигурации VLESS-XTLS-Reality? Дал бы тысячу очков вашему Гриффиндору))

Может быть где-нибудь в мае :) Пока что работы много, времени нет тестировать, а потом отпуск.

Если, конечно, кто-нибудь раньше не напишет :(

Желательно, чтобы настроенный VPN обновлялся без участия пользователя.

OpenVPN распространяется через apt и сам обновится на свежую версию, подключение лишь прервётся на несколько секунд.

Shadowsocks-rust распространяется через snap и тоже сам обновится.

Поддержка остальных сервисов из статьи (XTLS, Hysteria и т. д.) потребует участия пользователя? Нужно ли регулярно проверять обновления, скачивать их, останавливать сервисы, устанавливать обновления, запускать сервисы? Это можно как-то автоматизировать удобно и надёжно?

Говорю об установке клиентов и серверов на Linux, очевидно.

А вот как соотносится тот факт что все Xray, V2ray , Naive. Cloak .. и тп маскируются под https и конектятся на 443 порт - а с другой стороны китайцы в сети пишут что у них блокируют 443 порт? Они что в Китае https не используют что ли? А банки как же и прочие сервисы с персональными данными? И соответственно про РФ - а у нас что тоже могут 443 заблокировать???

НЛО прилетело и опубликовало эту надпись здесь

"запрета доступа к китайским сайтам через прокси "

как запретить ходить на определенные сайты ?

У меня во время изучения сабжей было стойкое ощущение, что всё это какой-то лютый овенинжениринг. Особенно ранние VMESS, где зачем-то навелосипедили своё шифрование. С объяснением автора XTLS-Vision/Reality вроде как звучат ок, но мне кажется что Naiveproxy в этом плане куда более минималистичное и элегантное решение.

Так и не понял, чем сейчас обфусцировать Wireguard - на VPS работает в Linux, а ходят туда со смартфонов и винды. Есть идеи?

Спасибо, интересно попробовать. Может и клиент для смартфона бует не такой ублюдский, как у WG.

Спасибо за материал!

А кто-то понимает, белый список протоколов там используется или чёрный? Если "испортить" (например, XOR-нуть) payload Ethernet-фрейма, пропустят или заблокируется?

Пока что черный, даже обычный XOR помогает. Пока что.

Спасибо! А посоветуйте, чем/как проще всего XOR'нуть трафик? (Я видел https://github.com/faicker/ipt_xor.)

Да, можно им, должно сработать.

Важно: автор не присутствует в Telegram или каких-либо иных месседжерах или соцсетях, не оказывает никаких платных консультаций и не выполняет никаких работ за деньги, а на вопросы отвечает только на хабре (когда есть время). Остерегайтесь мошенников.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Публикации

Читают сейчас

Истории

Идём на «Импульс Т1» по дороге из жёлтого кирпича
Как стать супергероем
Рейтинг IT-брендов работодателей 2023
Активность найма в 3 квартале 2023
Топ-7 годных статей из блогов компаний
Сколько тратят в IT: сеньор бэкендер
Перевернуть календарь и добавить событие

Работа